package estadosCFP;

import java.util.Calendar;
import java.util.List;

import sistema.Usuario;
import callForPapers.CallForPaper;
import callForPapers.Paper;

public enum EstadoCallForPaper {

	INICIAL,

	ABIERTO {
		@Override
		public void hoyEs(Calendar calendar, CallForPaper cfp) {
			if (cfp.getFechaTopeDePresentacion().compareTo(calendar) <= 0) {
				cfp.cerrarCfp();
			}
		}

		@Override
		public void agregarPaper(Paper paper, CallForPaper cfp) {
			if (cfp.tieneAreaEnComun(paper)
					&& !cfp.soyRevisor(paper.getAutor())) {
				cfp.getPapers().add(paper);
			}

		}
	},

	CERRADO {
		@Override
		public void hoyEs(Calendar calendar, CallForPaper cfp) {
			if (cfp.getFechaTopeDeRevision().compareTo(calendar) <= 0) {
				cfp.finalizarCfp();
			}
		}

		@Override
		public List<Paper> mostrarPapersComoRevisor(CallForPaper cfp,
				Usuario usuario) {

			return cfp.verPapersComoRevisor(cfp, usuario);

		}

	},
	FINALIZADO;

	public void hoyEs(Calendar calendar, CallForPaper cfp) {

	}

	public void agregarPaper(Paper paper, CallForPaper cfp) {
		throw new RuntimeException(
				"No se puede agregar su paper, pruebe otro dia o en otro CFP :p");
	}

	public List<Paper> mostrarPapersComoRevisor(CallForPaper cfp,
			Usuario usuario) {
		throw new RuntimeException("El call for paper no esta finalizado");
	}
}
